#include "sys_support_indicator_led.h"
#include "sys_support_devices.h"

static GPIO_TypeDef *get_led_gpio(LED_ColorEnumdef color);
static uint16_t get_led_gpio_pin(LED_ColorEnumdef color);

void LED_On(LED_ColorEnumdef color)
{
    GPIO_TypeDef *gpio = get_led_gpio(color);
    uint16_t gpio_pin = get_led_gpio_pin(color);
    HAL_GPIO_WritePin(gpio, gpio_pin, GPIO_PIN_SET);
}

void LED_Off(LED_ColorEnumdef color)
{
    GPIO_TypeDef *gpio = get_led_gpio(color);
    uint16_t gpio_pin = get_led_gpio_pin(color);
    HAL_GPIO_WritePin(gpio, gpio_pin, GPIO_PIN_RESET);
}

void LED_Toggle(LED_ColorEnumdef color)
{
    GPIO_TypeDef *gpio = get_led_gpio(color);
    uint16_t gpio_pin = get_led_gpio_pin(color);
    HAL_GPIO_TogglePin(gpio, gpio_pin);
}

static GPIO_TypeDef *get_led_gpio(LED_ColorEnumdef color)
{
    switch(color)
    {
        case LED_Color_White:
        return INDICATOR_LED_WHITE_GPIO;
        case LED_Color_Red:
        return INDICATOR_LED_RED_GPIO;
        case LED_Color_Green:
        return INDICATOR_LED_GREEN_GPIO;
        case LED_Color_Blue:
        return INDICATOR_LED_BLUE_GPIO;
        case LED_Color_Yellow:
        return INDICATOR_LED_YELLOW_GPIO;
        default:
        return 0;
    }
}

static uint16_t get_led_gpio_pin(LED_ColorEnumdef color)
{
    switch(color)
    {
        case LED_Color_White:
        return INDICATOR_LED_WHITE_GPIO_PIN;
        case LED_Color_Red:
        return INDICATOR_LED_RED_GPIO_PIN;
        case LED_Color_Green:
        return INDICATOR_LED_GREEN_GPIO_PIN;
        case LED_Color_Blue:
        return INDICATOR_LED_BLUE_GPIO_PIN;
        case LED_Color_Yellow:
        return INDICATOR_LED_YELLOW_GPIO_PIN;
        default:
        return 0;
    }
}
